package cn.damai.mine.jvm;

public class ClassInitTest {
	
	/**
	 * 类的准备阶段：为类的静态变量分配内存，并将其初始化为默认值，初始值通常情况下是数据类型默认的零值（如0、0L、null、false等）
	 * 对基本数据类型来说，对于类变量（static）和全局变量，如果不显式地对其赋值而直接使用，则系统会为其赋予默认的零值，而对于局部变量来说，在使用前必须显式地为其赋值，否则编译时不通过。
	 */
	
	//对于同时被static和final修饰的常量，必须在声明的时候就为其显式地赋值，否则编译时不通过；  去除 = 0会报错：The blank final field a may not have been initialized
	private static final int a = 0;
	
	//对于类变量（static）和全局变量，如果不显式地对其赋值而直接使用，则系统会为其赋予默认的零值
	private static int b;
	
	private int d;
	
	//只被final修饰的常量则既可以在声明时显式地为其赋值，也可以在类初始化时显式地为其赋值，总之，在使用前必须为其显式地赋值，系统不会为其赋予默认零值
	private final int e = 0;

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		System.out.println(a+1);
		
		System.out.println(a);
		
		System.out.println(b+1);
		
	}
	
	private void doSomeThing(){
		
		//对于局部变量来说，在使用前必须显式地为其赋值，否则编译时不通过
		int c = 0;
		System.out.println(c+1);
		
	}

}
